Git fork、pr的开发模式

整理了 “GitHub 从单机到联机:玩转 Pull Request” 方便自己看

第一步:Fork原仓库

第二步:将 Fork 来的仓库 clone 到本地

1
git clone https://github.com/AA/BBA.git

第三步:创建新分支

可以但不推荐直接在master上修改。

1
git checkout -b impl-rational-numbers

第四步:正常提交代码

1
2
3
4
5
6
git status
git add .
git commit -am "balabalbabla"

提交代码到自己的远程仓库
git push -u origin impl-rational-numbers

第五步:Pull request

打开 自己项目 的页面会出现一个提示提示。

avatar

然后点击按钮 Compare & pull request,开始编辑我们的 PR:

GitHub 关键词:当使用 fix(es),close(s) 或 resolve(s) 时,如果这个 Pull Request 被合并,会自动关闭对应的 Issue。

这里我标出了 Closes #1300,那么当我们贡献的代码被接受时,就会关闭 rational-numbers: implement exercise 这个 Issue。

正确地使用 GitHub 关键词能够极大地方便仓库维护者,他们就不需要去查找对应的是哪个 Issue 并去手动关闭它了。

avatar

点击 Create pull request,进行提交!

第六步:等待作者反馈

作者提出修改建议 -> 修改重新提交 -> 作者合并分支

作者合并分支的方式为:将作者自己的master 合并到 我们所提交的分支

因为当我们在这个分支上工作时,AA/BB 的 master 分支上可能提交了新的修改,导致我们的分支并不是最新的。

通过将 master 分支并入我们的分支,我们的分支就能进入即将部署(Ready to Deploy)状态了。

然后等待CI检测、如果CI检测不通过,则需要根据提示修改代码 重新提交

善后

由于 impl-rational-numbers 已经合并,可以安全删除,所以我们点击 Delete branch 按钮,删除我们远程仓库 AA/BBA 中的分支。
然后在本地输入下面的命令,删除本地分支:

1
2
$ git checkout master
$ git branch -D impl-rational-numbers

分支操作

首先,我们创建dev分支,然后切换到dev分支:

1
2
$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

1
2
3
$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用git branch命令查看当前分支:

1
2
3
$ git branch
* dev
master

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行,然后提交:

现在,dev分支的工作完成,我们就可以切换回master分支:

1
2
$ git checkout master
Switched to branch 'master'

现在,我们把dev分支的工作成果合并到master分支上:

1
2
3
4
5
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

合并完成后,就可以放心地删除dev分支了:

1
2
$ git branch -d dev
Deleted branch dev (was b17d20e).

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

###其他技巧

git remote add upstream git@code.izhaohu.com:dolphin/proto.git

upstream 已经在 remote 列表中!然后我们就可以轻松地进行同步了。
先确保当前处在 master 分支上,然后获取 upstream 的修改,再并入我们本地的 master 分支。

1
2
3
$ git checkout master
$ git fetch upstream
$ git merge upstream/master

再把本地的更新 push 到 origin,也就是我们的 GitHub 仓库:

1
$ git push